﻿using System;

namespace Web7.Logging
{
	/// <summary>
	/// 生成日志记录工具的支持程序应该继承的抽象类
	/// </summary>
	public abstract class LoggerFactory
	{
		/// <summary>
		/// 获取与指定类型对应的日志记录工具的实例
		/// </summary>
		/// <param name="type">用于创建日志记录工具的类型</param>
		/// <returns></returns>
		public abstract ILogger CreateLogger(Type type);
		/// <summary>
		/// 获取或设置当前所使用的 <see cref="LoggerFactory"/> 对象。
		/// <remarks>
		/// 在使用系统提供的 Logger 服务之前，必须正确地设置该属性。
		/// </remarks>
		/// </summary>
		public static LoggerFactory Current
		{
			get;
			set;
		}
	
		// 当 Current 属性没有值时，使用以下提示：
		// InvalidOperationException： LoggerFactory is not available at this time. Confirm LoggerFactory.Current has a non-NULL value.
	}

	public static class LoggerFactoryExtension
	{
		/// <summary>
		/// 获取与指定实例的类型对应的日志记录工具的实例
		/// </summary>
		/// <param name="loggerFactory"></param>
		/// <param name="instance">用于创建日志的实例</param>
		/// <returns></returns>
		public static ILogger CreateLogger(this LoggerFactory loggerFactory, object instance)
		{
			if(null == instance)
			{
				return null;
			}

			return loggerFactory.CreateLogger(instance.GetType());
		}
	}
}
